const { DataTypes } = require('sequelize');
const { sequelize } = require('../library/sequelize.js');

// 投票额外计数模型
const voteExtraModel = sequelize.define('ly_vote_extra', {
    vote_extra_id: {
        type: DataTypes.STRING(255),
        primaryKey: true,
        allowNull: false,
        comment: '自增主键'
    },
    executor_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '执行人ID:后台增加时和user_id不一致'
    },
    user_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '用户ID'
    },
    vote_id: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '投票活动ID'
    },
    vote_entry_id: {
        type: DataTypes.INTEGER,
        allowNull: false,
        comment: '作用的作品ID'
    },
    extra_type: {
        type: DataTypes.TINYINT,
        allowNull: false,
        comment: '额外获取的类型:0广告-默认 1充值礼品-后续功能'
    },
    extra_ad_id: {
        type: DataTypes.STRING(255),
        allowNull: false,
        defaultValue: '',
        comment: '广告的ID或相关ID'
    },
    extra_mark: {
        type: DataTypes.STRING(255),
        allowNull: false,
        comment: '额外获取记录的概述：看广告或者...'
    },
    create_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '创建时间:获得额外投票数的ID'
    },
    update_time: {
        type: DataTypes.INTEGER.UNSIGNED,
        allowNull: false,
        defaultValue: 0,
        comment: '更新时间'
    }
}, {
    tableName: 'ly_vote_extra',
    timestamps: false,
    comment: '投票额外计数表'
});

// 获取创建时的默认值
function getCreateDefaults() {
    const now = Math.floor(Date.now() / 1000);
    return {
        create_time: now,
        update_time: now
    };
}

// 获取更新时的默认值
function getUpdateDefaults() {
    return {
        update_time: Math.floor(Date.now() / 1000)
    };
}

// 生成唯一ID
function generateVoteExtraId() {
    const timestamp = Date.now();
    const random = Math.floor(Math.random() * 10000);
    return `ve_${timestamp}_${random}`;
}

// 初始化模型
async function initModel() {
    try {
        // 测试数据库连接
        await sequelize.authenticate();
        console.log('✅ 投票额外计数模型数据库连接成功');

        // 同步模型到数据库
        await voteExtraModel.sync({ alter: false });
        console.log('✅ 投票额外计数模型同步成功');

        // 输出模型字段信息
        console.log('🔍 投票额外计数模型字段数量:', Object.keys(voteExtraModel.rawAttributes).length);
        console.log('📋 投票额外计数模型字段列表:', Object.keys(voteExtraModel.rawAttributes));

        return true; // 返回成功状态

    } catch (error) {
        console.error('❌ 投票额外计数模型初始化失败:', error);
        return false; // 返回失败状态
    }
}

module.exports = {
    voteExtraModel,
    getCreateDefaults,
    getUpdateDefaults,
    generateVoteExtraId,
    initModel
};